package 反射.认识反射和获取类;

public class Test {
    public static void main(String[] args) throws Exception {
        // 反射(Reflection):
        // 反射就是: 加载类, 并允许以编程的方式解剖类中的各种成分 (成员变量, 方法, 构造器等)

        // 反射学什么?
        // 学习获取类的信息, 操作他们
        // 1. 反射第一步: 加载类, 获取类的字节码: Class对象
        // 2. 获取类的构造器: Constructor对象
        // 3. 获取类的成员变量: Field对象
        // 4. 获取类的成员方法: Method对象

        // 获取Class类的三种方式
        // Class c1 = 类名.class
        // 调用Class提供方法: public static Class forName(String package);
        // Object提供的方法: public Class getClass(): Class c3 = 对象.getClass();

        // 第一种
        Class c1 = Student.class;
        System.out.println(c1.getName()); // 全类名
        System.out.println(c1.getSimpleName()); // 简名

        // 第二种
        Class c2 = Class.forName("反射.认识反射和获取类.Student");// 里面要写全类名
        System.out.println(c1 == c2); // true

        // 第三种
        Student s = new Student();
        Class c3 = s.getClass();
        System.out.println(c1 == c3); // true
    }
}
